﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Modele;

namespace Guitar.Vues
{
    /// <summary>
    /// Logique d'interaction pour VueNote.xaml
    /// </summary>
    public partial class VueNoteTab : Canvas
    {

        public Modele.Note note;
        private bool _IsSelected = false;

        public bool IsSelected{

            get { return _IsSelected; }
            set
            {
                _IsSelected = value; if (value)
                {
                   
                  
                    labelCase.Background = (Brush)FindResource("selected");
                   
                }
                else
                {
                  
                    labelCase.Background = (Brush)FindResource("normal");
                }
            }


        }



        /* Permet d'instancier une note sur une Tablature ou sur une portée */
        public VueNoteTab()
        {
            InitializeComponent();
            note.OnRythmChanged += RythmChanged;
            
        }

        public VueNoteTab(Modele.Note n,int nCase)
        {
            InitializeComponent();
            note = n;
            labelCase.Content = nCase;
            note.OnRythmChanged += RythmChanged;
            Update();
            
        }
       

        private void Rectangle_MouseEnter(object sender, MouseEventArgs e)
        {
         
            if (!IsSelected)

            {
                labelCase.Background = (Brush)FindResource("over");

            }

        }

        private void Rectangle_MouseLeave(object sender, MouseEventArgs e)
        {
            if (!IsSelected)
            {
             
                labelCase.Background = (Brush)FindResource("normal");
            }

        }

        private void UserControl_MouseDown(object sender, MouseButtonEventArgs e)
        {

            if (IsSelected)
            {
                IsSelected = false;
            }
            else
            {
                IsSelected = true;
            }
           
        }

        public void Update()
        {

            /* On met à jour la largeur prise par la note selon le rithme  */
            int tailleMin = 20;
            switch (note.rythme)
            {

                case Note.TypeRytmique.QuadrupleCroche: tailleMin = 20; break;
                case Note.TypeRytmique.TripleCroche: tailleMin += 4; break;
                case Note.TypeRytmique.DoubleCroche: tailleMin += 4 * 2; break;
                case Note.TypeRytmique.Croche: tailleMin += 4 * 3; break;
                case Note.TypeRytmique.Noire: tailleMin += 4 * 4; break;
                case Note.TypeRytmique.Blanche: tailleMin += 4 * 10; break;
                case Note.TypeRytmique.Ronde: tailleMin += 4 * 20; break;
            }


            Width = tailleMin;
     
            //Si la note est pointées
            if (note.pointure == Note.Pointure.Pointe)
            {
                Width = Width + Width / 2;
            }
            if (note.pointure == Note.Pointure.DoublePointe)
            {
                Width = Width + Width ;
            }

            /* Infobulle de la note */
            string[] noteName = note.ToString(App.option.LangueNotationMusicale);
            Tool.Content = Tool.Content = "\nNote : " + noteName[0] + noteName[1] + "\nOctave : " + note.octave + "\nFreq : " + note.freqHz + "\nRythme : " + noteName[3]; 
        }

        /* Quand le rythme change, on change la place que prends la note */
        private void RythmChanged(object sender, EventArgs e)
        {
            Update();

        }

        /******************** Menu Contextuel ******************************/
        private void MenuItemRythm_Click(object sender, RoutedEventArgs e)
        {
            switch (((MenuItem)sender).Header.ToString())
            {
                case "Ronde": note.rythme = Note.TypeRytmique.Ronde; Update(); break;
                case "Blanche": note.rythme = Note.TypeRytmique.Blanche; Update(); break;
                case "Noire": note.rythme = Note.TypeRytmique.Noire; Update(); break;
                case "Croche": note.rythme = Note.TypeRytmique.Croche; Update(); break;
                case "Double croche": note.rythme = Note.TypeRytmique.DoubleCroche; Update(); break;
                case "Triple croche": note.rythme = Note.TypeRytmique.TripleCroche; Update(); break;
                case "Quadruple croche": note.rythme = Note.TypeRytmique.QuadrupleCroche; Update(); break;

            }

        }
    }
}
